Ordinary
About

Generated Value

profileordilov / 2022. 2. 16

JPA ID 생성 방식

데이터베이스에서 기본키를 생성하는 방식은 크게 두 가지로 나뉩니다.

  • 자동으로 생성되는 키 방식
  • 데이터의 의미 있는 부분에서 키 생성 방식

의미 있는 키 방식이면 데이터를 보고 구분하기 쉽고 ID에서 의미 있는 정보를 추출할 수도 있습니다. 하지만 가장 큰 문제점이 있는데 데이터가 많아졌을 때도 키의 유일성을 보장할 수 있을지 모른다는 점입니다. 유일성을 보장하는 개인 정보를 사용하는 방법도 상황에 따라 데이터베이스에서 사용하지 못할 수 있습니다. 따라서 자주 사용하는 방식은 의미 없는 랜덤 키를 데이터베이스에서 생성받아 사용합니다.

데이터베이스에 따라 다른 생성 방식

GenerationType.IDENTITY

IDENTITY 방식은 auto increment 방식으로 생성합니다. MySQL, PostgreSQL 등에서 주로 사용하는 방식입니다.

GenerationType.SEQUENCE

데이터베이스에서 유일한 값을 생성받아 만드는 방식입니다. Oracle, H2 등에서 주로 사용하는 방식입니다.

GenerationType.TABLE

데이터베이스에서 테이블에서 생성전략을 받아서 사용하는 방식입니다.

GenerationType.AUTO

데이터베이스의 방언에 따라 생성 방식을 자동으로 지정합니다.

선택 방법

당연히 선택할 때 중요한 점은 사용할 DB와 어울리는 방법을 선택하는 것입니다. 방식을 명시해도 결국에 모든 방식은 DB에서 생성되는 Key에 의존하게 됩니다. 따라서 선택한 DB에서 쉽게 사용할 수 있는 지원 방식을 사용하는 것이 좋습니다.

그렇다면 AUTO를 선택하면 가장 좋은 방식이라고 생각할 수 있습니다. 하지만 버전에 따라, AUTO가 선택하는 방식은 달라질 수 있습니다. 예를 들어 MySQL의 경우 Hibernate 1.5에서는 IDENTITY를 2.0에서는 TABLE 방식을 선택합니다. table 방식을 사용하려면 테이블을 따로 만들어서 생성 전략 방식을 제공해야 합니다. 간단하게 id를 증감시키는 auto increment에 비해 번거로울 수 있습니다.

따라서 AUTO가 상황에 가장 맞는 방식을 제공한다는 보장이 없으므로 본인이 선택하는 것을 추천합니다.